#pragma once
#include <string>
#include <cstddef> 
#include <odb/nullable.hxx>
#include <odb/core.hxx>

/*
在好友的操作中有个操作需要额外的管理，那就是申请好友的事件，因为用户 A 申
请用户 B 为好友，并非一次性完成，需要用户 B 对本次申请进行处理，同意后才算
是一次完整的流程。而在两次操作之间我们就需要为两次操作建立起相匹配的关系
映射。
包含字段：
• ID：作为主键
• 事件 ID
• 请求者用户 ID
• 响应者用户 ID
• 状态：用于表示本次请求的处理阶段，其包含三种状态：待处理-todo，同意-
accept，拒绝-reject。
*/

namespace zrb 
{
    #pragma db object table("friend_apply")
    class Friend_Apply
    {
    public:
        Friend_Apply()
        {}

        Friend_Apply(const std::string& event_id,const std::string& uid,const std::string& pid)
            :_event_id(event_id)
            ,_user_id(uid)
            ,_peer_id(pid)
        {}

        std::string user_id()
        {
            return _user_id;
        }
        void user_id(const std::string& val)
        {
            _user_id = val;
        }

        std::string event_id()
        {
            return _event_id;
        }
        void event_id(const std::string& val)
        {
            _event_id = val;
        }

        std::string peer_id()
        {
            return _peer_id;
        }
        void peer_id(const std::string& val)
        {
            _peer_id = val;
        }

    private:
        friend class odb::access;
        #pragma db id auto //主键自增
        unsigned long _id;
        #pragma db type("varchar(64)") index
        std::string _event_id;     //事件ID
        #pragma db type("varchar(64)") index
        std::string _user_id;      //申请者用户ID
        #pragma db type("varchar(64)") index
        std::string _peer_id;      //响应者用户ID
    };
}

